// 权限配置 - 与后端 application/extra/miniprogram_permissions.php 保持一致
// 注意：此文件不依赖任何其他模块，避免循环引用
const permissionConfig = {
  // 管理员权限配置
  adminPermissions: {
    1: { // 超级管理员
      name: '超级管理员',
      description: '拥有所有模块的完整权限',
      permissions: {
        'product_manage': ['view', 'add', 'edit', 'delete'],
        'model_manage': ['view', 'add', 'edit', 'delete'],
        'process_manage': ['view', 'add', 'edit', 'delete'],
        'price_manage': ['view', 'add', 'edit', 'delete', 'batch'],
        'order_manage': ['view', 'add', 'edit', 'delete'],
        'allocation_manage': ['view', 'add', 'edit', 'delete', 'batch'],
        'report_manage': ['view', 'audit'],
        'active_report_manage': ['view', 'audit'],
        'admin_manage': ['view', 'add', 'edit', 'delete'],
        'user_manage': ['view', 'add', 'edit', 'delete', 'password'],
      }
    },
    2: { // 订单产品管理员
      name: '订单产品管理员',
      description: '只能管理产品、订单、型号',
      permissions: {
        'product_manage': ['view', 'add', 'edit', 'delete'],
        'model_manage': ['view', 'add', 'edit', 'delete'],
        'process_manage': ['view'], // 只读
        'price_manage': ['view'], // 只读
        'order_manage': ['view', 'add', 'edit', 'delete'],
        'allocation_manage': ['view'], // 只读
        'report_manage': ['view'], // 只读
        'active_report_manage': ['view'], // 只读
        'user_manage': ['view', 'edit', 'password'], // 可以查看、编辑、改密，但不能删除
      }
    },
    3: { // 报工管理员
      name: '报工管理员',
      description: '只能管理报工、主动报工、审核、分工',
      permissions: {
        'product_manage': ['view'], // 只读
        'model_manage': ['view'], // 只读
        'process_manage': ['view'], // 只读
        'price_manage': ['view'], // 只读
        'order_manage': ['view'], // 只读
        'allocation_manage': ['view', 'add', 'edit', 'delete', 'batch'],
        'report_manage': ['view', 'audit'],
        'active_report_manage': ['view', 'audit'],
      }
    },
    12: { // 管理员12
      name: '管理员12',
      description: '自定义权限配置',
      permissions: {
        'product_manage': ['add', 'edit', 'delete', 'view'],
        'model_manage': ['add', 'edit', 'view'],
        'process_manage': ['add', 'edit', 'batch', 'view'],
        'price_manage': ['view'],
        'order_manage': ['view'],
        'allocation_manage': ['add', 'edit', 'delete', 'view'],
        'report_manage': ['view'],
        'active_report_manage': [],
        'admin_manage': [],
      }
    }
  },

  // API权限映射
  apiPermissions: {
    // 产品管理
    'getProductList': { module: 'product_manage', action: 'view' },
    'createProduct': { module: 'product_manage', action: 'add' },
    'updateProduct': { module: 'product_manage', action: 'edit' },
    'deleteProduct': { module: 'product_manage', action: 'delete' },
    
    // 产品型号管理
    'getProductModelList': { module: 'model_manage', action: 'view' },
    'createProductModel': { module: 'model_manage', action: 'add' },
    'updateProductModel': { module: 'model_manage', action: 'edit' },
    'deleteProductModel': { module: 'model_manage', action: 'delete' },
    
    // 工序管理
    'getProcessList': { module: 'process_manage', action: 'view' },
    'getProcesses': { module: 'process_manage', action: 'view' },
    'createProcess': { module: 'process_manage', action: 'add' },
    'updateProcess': { module: 'process_manage', action: 'edit' },
    'deleteProcess': { module: 'process_manage', action: 'delete' },
    
    // 工序价格管理
    'getProcessPriceList': { module: 'price_manage', action: 'view' },
    'createProcessPrice': { module: 'price_manage', action: 'add' },
    'updateProcessPrice': { module: 'price_manage', action: 'edit' },
    'deleteProcessPrice': { module: 'price_manage', action: 'delete' },
    'batchProcessPrice': { module: 'price_manage', action: 'batch' },
    
    // 订单管理
    'getOrderList': { module: 'order_manage', action: 'view' },
    'createOrder': { module: 'order_manage', action: 'add' },
    'updateOrder': { module: 'order_manage', action: 'edit' },
    'deleteOrder': { module: 'order_manage', action: 'delete' },
    'getOrderProgressList': { module: 'order_manage', action: 'view' },
    'getProcessProgressStats': { module: 'order_manage', action: 'view' },
    'getOrderProgressDetail': { module: 'order_manage', action: 'view' },
    'getProgressFilterOptions': { module: 'order_manage', action: 'view' },
    
    // 分工管理
    'getAllocationList': { module: 'allocation_manage', action: 'view' },
    'createAllocation': { module: 'allocation_manage', action: 'add' },
    'updateAllocation': { module: 'allocation_manage', action: 'edit' },
    'deleteAllocation': { module: 'allocation_manage', action: 'delete' },
    'batchCreateAllocation': { module: 'allocation_manage', action: 'batch' },
    
    // 报工管理
    'getReportList': { module: 'report_manage', action: 'view' },
    'auditReport': { module: 'report_manage', action: 'audit' },
    
    // 主动报工管理
    'getActiveReportList': { module: 'active_report_manage', action: 'view' },
    'auditActiveReport': { module: 'active_report_manage', action: 'audit' },
  },

  // 默认权限
  defaultPermissions: {
    'product_manage': ['view'], // 默认只读
    'model_manage': ['view'], // 默认只读
    'process_manage': ['view'], // 默认只读
    'price_manage': ['view'], // 默认只读
    'order_manage': ['view'], // 默认只读
    'allocation_manage': ['view'], // 默认只读
    'report_manage': ['view'], // 默认只读
    'active_report_manage': ['view'], // 默认只读
  }
};

const permissionUtils = {
  /**
   * 检查管理员是否有指定模块和操作的权限
   * @param {number} adminId - 管理员ID
   * @param {string} module - 模块名称
   * @param {string} action - 操作名称
   * @returns {boolean} - 是否有权限
   */
  hasPermission(adminId, module, action) {
    // 超级管理员拥有所有权限
    if (adminId == 1 || adminId === 1 || adminId === '1') {
      console.log('超级管理员权限检查 - adminId:', adminId, '类型:', typeof adminId);
      return true;
    }

    // 从全局数据中获取管理员权限
    const app = getApp();
    const adminInfo = app ? app.globalData.adminInfo : null;
    
    console.log('权限检查 - adminId:', adminId, 'module:', module, 'action:', action);
    console.log('adminInfo:', adminInfo);
    
    if (adminInfo && adminInfo.permissions) {
      // 使用全局存储的权限数据（从后端API获取）
      const modulePermissions = adminInfo.permissions[module] || [];
      const hasPermission = modulePermissions.includes(action);
      console.log('后端权限检查 - modulePermissions:', modulePermissions, 'hasPermission:', hasPermission);
      return hasPermission;
    }

    console.log('全局数据中没有权限信息，拒绝访问');
    
    // 如果全局数据中没有权限信息，拒绝访问（不再使用本地配置）
    console.log('权限检查失败 - 没有权限信息');
    return false;
  },

  /**
   * 获取管理员的权限配置
   * @param {number} adminId - 管理员ID
   * @returns {object} - 权限配置
   */
  getAdminPermissions(adminId) {
    // 从全局数据中获取管理员权限
    const app = getApp();
    const adminInfo = app ? app.globalData.adminInfo : null;
    
    if (adminId == 1) {
      return {
        name: '超级管理员',
        permissions: adminInfo && adminInfo.permissions ? adminInfo.permissions : {}
      };
    }

    if (adminInfo && adminInfo.permissions) {
      return {
        name: adminInfo.nickname || adminInfo.username || '管理员',
        permissions: adminInfo.permissions
      };
    }

    // 如果没有权限信息，返回空权限
    return {
      name: '未知用户',
      permissions: {}
    };
  },

  /**
   * 获取权限描述
   * @param {string} module - 模块名称
   * @param {string} action - 操作名称
   * @returns {string} - 权限描述
   */
  getPermissionDescription(module, action) {
    const moduleNames = {
      'product_manage': '产品管理',
      'model_manage': '型号管理',
      'process_manage': '工序管理',
      'price_manage': '价格管理',
      'order_manage': '订单管理',
      'allocation_manage': '分工管理',
      'report_manage': '报工管理',
      'active_report_manage': '主动报工管理',
      'production_plan_manage': '生产计划管理',
      'admin_manage': '管理员管理',
      'user_manage': '用户管理'
    };

    const actionNames = {
      'view': '查看',
      'add': '新增',
      'edit': '编辑',
      'delete': '删除',
      'batch': '批量操作',
      'audit': '审核',
      'password': '密码管理'
    };

    const moduleName = moduleNames[module] || module;
    const actionName = actionNames[action] || action;
    
    return `${moduleName} - ${actionName}`;
  }
};

module.exports = permissionUtils;